package com.nurt.dao;

import com.nurt.entity.DishEntity;

import java.sql.SQLException;
import java.util.List;

/**
 * DishDao接口定义了数据库中与菜品相关操作的方法。
 * 这些方法包括查询所有菜品、查询单个菜品、更新菜品信息、插入菜品信息。
 * 通过实现这个接口，可以进行数据库中菜品数据的增删改查操作。
 */
public interface DishDao {
    /**
     * 从数据库中查询所有菜品信息。
     *
     * @return 菜品列表，包含所有菜品的信息。
     * @throws SQLException 如果查询过程中发生数据库错误。
     */
    List<DishEntity> selectDishes() throws SQLException;

    /**
     * 根据菜品ID查询菜品信息。
     *
     * @param dishId 菜品的唯一标识ID。
     * @return 与给定ID匹配的菜品实体。
     * @throws SQLException 如果查询过程中发生数据库错误。
     */
    DishEntity selectDish(int dishId) throws SQLException;

    /**
     * 根据菜品实体的属性查询菜品信息。
     * 此方法允许通过菜品的属性（如名称、类型等）来查询菜品，提供了更灵活的查询方式。
     *
     * @param dish 菜品实体，包含用于查询的属性。
     * @return 与给定菜品实体属性匹配的菜品实体。
     * @throws SQLException 如果查询过程中发生数据库错误。
     */
    DishEntity selectDish(DishEntity dish) throws SQLException;

    /**
     * 更新数据库中的菜品信息。
     *
     * @param dish 需要更新的菜品实体，包含更新后的菜品信息。
     * @return 更新操作影响的行数。
     * @throws SQLException 如果更新过程中发生数据库错误。
     */
    int updateDish(DishEntity dish) throws SQLException;

    /**
     * 向数据库中插入新的菜品信息。
     *
     * @param dish 新的菜品实体，包含待插入的菜品信息。
     * @return 插入操作影响的行数。
     * @throws SQLException 如果插入过程中发生数据库错误。
     */
    int insertDish(DishEntity dish) throws SQLException;
}
